本发明公开了一种结构化P2P网络中的路由系统构建方法,主要解决现有技术查找效率不高,结点负载不均,物理网络与逻辑网络失配的问题。它包括:构建双层环状网络、为数据对象分配结点、构造路由表、存储热门对象和结点负载均衡,其中,双层环状网络根据结点IP地址和网关地址构建;数据对象根据其相关属性哈希值在双层网络中比较大小来分配;路由表分R指向表和N指向表两部分,存放路由信息;存储热门对象是对结点增加热门对象列表和访问计数器;负载均衡是对结点设置状态表,记录其他结点发来的负载状态。本发明具有逻辑网络与物理网络匹配,查找延迟小、效率高,结点负载均衡的优点,可用于网络中资源共享、即时通信、多媒体传输和协同工作。
1.一种结构化P2P网络中的路由系统构建方法,包括:(A)构建网络:(A1)将结点n用标识符G表示,G=nodeID,G共有m位,前m1位表示为G1,后m2位表示为G2,则结点n表示为n(G1,G2);(A2)对所有结点的G1值与G2值进行如下计算:G1=Hash(GIP)mod2
m1;G2=Hash(IP)mod2
m2;GIP为结点n的网关地址,IP为结点n的互联网协议地址;(A3)将G1值相同的结点归为同一个簇,G1值不相同的结点各自成簇,则所有结点划分为很多簇,同一簇中结点的G2值不相同;(A4)将不同的簇中结点的G1值按从小到大顺时针排列成一个环状结构,形成高层环;(A5)对同一簇中的结点按G2值从小到大顺时针排列成一个环状结构,形成低层环,构成双层环状网络;(B)为数据对象分配结点:(B1)将数据对象用标识符k表示,k=objectID,k共有m位,前m1位表示为k1,后m2位表示为k2,则数据对象表示为k(k1,k2);(B2)将数据对象k的k1值按顺时针方向与高层环上每个簇的G1值进行比较,若k1值小于或等于除第一簇外的某个簇的G1值,同时大于该簇的前一个簇的G1值,则将数据对象k分配在该簇的低层环中;若k1值小于或等于第一簇的G1值,则将数据对象k分配在第一簇的低层环中;(B3)将数据对象k的k2值按顺时针方向与低层环上每个结点的G2值进行比较,若k2值小于或等于某个结点的G2值,第一个结点除外,同时大于该结点前一个结点的G2值,则将数据对象k分配给该结点;若k2值小于或等于第一个结点的G2值,则将数据对象k分配给这个簇第一个结点;若该低层环只有一个结点,则数据对象k直接分配给该结点;(C)构造路由表:(C1)每个结点保存一张m项的路由表,将路由表分为两个部分,分别用R指向表和N指向表表示;(C2)结点n(G1,G2)的R指向表中的第i项为结点([(G1+2
i-1)mod2
m1],G2),同时记录它在高层环上的后继,1≤i≤m1,mod表示求余;(C3)结点n(G1,G2)的N指向表中的第i项为(G1,[(G2+2
i-1)mod2
m2]),同时记录它在低层环上的后继,1≤i≤m2;(C4)根据路由表的R指向表在高层环上进行路由,根据路由表的N指向表在低层环上通过路由查找数据;(D)存储热门对象:(D1)将访问次数大于M的数据对象称为热门对象;(D2)将热门对象放置在一个列表中,列表共分三部分:数据对象ID、保存数据对象的结点IP和数据对象访问次数,该列表称为热门对象列表;(D3)将记录数据对象访问次数的计数器称为数据对象访问计数器,当数据对象要访问的结点收到一个数据对象访问请求时,数据对象访问计数器将对相应的访问次数加1;(D4)对每个结点增加一张热门对象列表和一个数据对象访问计数器;(E)结点负载均衡:(E1)为每个结点设置一个状态表,用于记录从其他结点发来的负载状态,负载状态分为四部分:结点ID、结点IP、当前负载量和时戳,定义结点的当前负载量为最近Δt时间内收到的访问请求数;(E2)当结点n收到访问请求时,将根据自身及其状态表中结点的负载利用率决定如何处理请求,其中负载利用率=当前负载量/结点负载能力:若结点n的负载利用率小于状态表中所有结点的负载利用率时,则结点n响应请求;否则结点n将请求转发给状态表中拥有最小负载利用率的结点。
2.根据权利要求1所述的路由系统构建方法,其中步骤(A)所述的Hash函数,采用安全散列函数SHA-1,SHA-1是一个将不大于2
64位信息概括为一串160位信息的函数。
3.根据权利要求1所述的路由系统构建方法,其中步骤(D1)所述的访问次数大于M的数据对象,是根据实际需要或反复实验来确定合适的M值。
4.根据权利要求1所述的路由系统构建方法,其中步骤(C4)所述的根据路由表的R指向表在高层环上进行路由,按如下步骤进行:(C4.1)根据数据对象k在高层环存在的位置进行定位:若数据对象k保存在当前低层环,则直接查找到数据对象k所在低层环,执行步骤(C4.3);若数据对象k没有保存在当前低层环,则执行步骤(C4.2);(C4.2)通过所在低层环第一个结点的路由表的R指向表查找到高层环上在数据对象k之前且最接近k的低层环,返回步骤(C4.1);(C4.3)确定数据对象k所在低层环,根据路由表的N指向表继续路由。
5.根据权利要求1所述的路由系统构建方法,其中步骤(C4)所述的根据路由表的N指向表在低层环上通过路由查找数据,按如下步骤进行:(C4.a)根据数据对象k在低层环存在的位置进行查找:若数据对象k保存在所在低层环的当前结点,则直接查找保存数据对象k的结点,查找完成;若没有保存在当前结点,则执行步骤(C4.b);(C4.b)通过当前结点路由表的N指向表查找到低层环上数据对象k之前且最接近k的结点n,返回步骤(C4.a)。
技术领域本发明属于通信技术领域,特别涉及P2P网络传输中的结构化路由方法,可用于网络中资源共享、即时通信、多媒体传输和协同工作。
背景技术P2P是一种分布式网络,网络的参与者共享他们所拥有的一部分硬件资源,即存储能力、CPU能力、网络连接能力,这些共享资源需要由网络提供内容和服务,能被其它对等结点peer无需经过中间实体而直接访问。P2P网络也有许多不同的网络结构,由于网络结构的不同,对于资源的查找方法也就不同,目前P2P网络主要有以下几种结构:(1)集中式的P2P网络,这种网络结构主要是有一个中心服务器来负责记录共享的信息,一旦中心服务器崩溃,那么整个系统就会瘫痪。客户端在下载资源和上传资源时会在服务器端记录下这些资源的信息,以供其它用户查询并下载;(2)分布式的P2P网络,这种网络结构又分为结构化P2P网络和非结构化P2P网络。非结构化拓扑的P2P网络采用了随机图的组织方式来形成一个松散的网络,这种结构每个结点都具有相同的功能,既是客户机又是服务器。结构化P2P网络利用路由算法,通过分布式散列函数将输入的数据唯一地映射到某个结点上,然后通过一些特定路由算法查找到该结点,并与该结点建立连接。结构化P2P网络中典型的协议就是Chord协议。Chord协议是在2001年由麻省理工学院提出,Chord协议采用分布式散列算法,结点之间完全平等并完成同样的工作。根据Chord协议组成的环状网络称为Chord网络。在Chord网络中,每个网络结点通过安全散列函数获得唯一的ID,即nodeID=Hash(node),Hash为安全散列函数,node通常是结点端口地址、端口号、随机数或者它们的组合;数据对象通过安全散列函数获得唯一的ID,即objectID=Hash(object),object通常是数据对象的名称、内容、发布者或者它们的组合。Chord网络按照如下方法将数据对象分配到网络结点中:首先,所有的结点按nodeID从小到大顺时针排列在一个环上,数据对象的objectID用k表示,其被分配到环上顺时针方向紧随k或与k相等的第一个结点上,此结点也称为对象k的后继,对象k则称为此结点的前驱。Chord网络把所有的结点组织成一个结构化的网络,并将文件索引分布在其中。这样的映射过程并没有考虑物理网络的情况,则构建起来的逻辑上的网络往往和物理网络不一致。Chord查找协议存在不足之处主要有:(1)Chord网络的查找效率不高,延迟严重;(2)Chord网络中结点由于异构性,会造成负载不均;(3)Chord网络构造的逻辑网络与物理网络失配,逻辑网络与实际的网络之间没有联系,路由过程中存在“舍近求远”的情况。
发明内容本发明的目的在于克服上述已有技术的不足,提出了一种结构化P2P网络中的路由系统构建方法,能够提高查找效率,有效地缩短查找延迟时间,均衡结点的负载,使得物理网络与逻辑网络相匹配。为实现上述目的,本发明基于结构化P2P网络构建路由系统的步骤包括如下:(A)构建网络:(A1)将结点n用标识符G表示,G=nodeID,G共有m位,前m1位表示为G1,后m2位表示为G2,则结点n表示为n(G1,G2);(A2)对所有结点的G1值与G2值进行如下计算:G1=Hash(GIP)mod2
m1;G2=Hash(IP)mod2
m2;GIP为结点n的网关地址,IP为结点n的互联网协议地址;(A3)将G1值相同的结点归为同一个簇,G1值不相同的结点各自成簇,则所有结点划分为很多簇,同一簇中结点的G2值不相同;(A4)将不同的簇中结点的G1值按从小到大顺时针排列成一个环状结构,形成高层环;(A5)对同一簇中的结点按G2值从小到大顺时针排列成一个环状结构,形成低层环,构成双层环状网络;(B)为数据对象分配结点:(B1)将数据对象用标识符k表示,k=objectID,k共有m位,前m1位表示为k1,后m2位表示为k2,则数据对象表示为k(k1,k2);(B2)将数据对象k的k1值按顺时针方向与高层环上每个簇的G1值进行比较,若k1值小于或等于某个簇的G1值,其中第一簇除外,同时大于该簇的前一个簇的G1值,则将数据对象k分配在该簇的低层环中;若k1值小于或等于第一簇的G1值,则将数据对象k分配在第一簇的低层环中;(B3)将数据对象k的k2值按顺时针方向与步骤(B2)所述的低层环上每个结点的G2值进行比较,若k2值小于或等于某个结点的G2值,第一个结点除外,同时大于该结点前一个结点的G2值,则将数据对象k分配给该结点;若k2值小于或等于第一个结点的G2值,则将数据对象k分配给该簇第一个结点;若该低层环只有一个结点,则数据对象k直接分配给该结点;(C)构造路由表:(C1)每个结点保存一张m项的路由表,将路由表分为两个部分,分别用R指向表和N指向表表示;(C2)结点n(G1,G2)的R指向表中的第i项为结点([(G1+2
i-1)mod2
m1],G2),同时记录它在高层环上的后继,1≤i≤m1,mod表示求余;(C3)结点n(G1,G2)的N指向表中的第i项为(G1,[(G2+2
i-1)mod2
m2]),同时记录它在低层环上的后继,1≤i≤m2;(C4)根据路由表的R指向表在高层环上进行路由,根据路由表的N指向表在低层环上通过路由查找数据;(D)存储热门对象:(D1)将访问次数大于M的数据对象称为热门对象;(D2)将热门对象放置在一个列表中,列表共分三部分:数据对象ID、保存数据对象的结点IP和数据对象访问次数,该列表称为热门对象列表;(D3)将记录数据对象访问次数的计数器称为数据对象访问计数器,当数据对象要访问的结点收到一个数据对象访问请求时,数据对象访问计数器将对相应的访问次数加1;(D4)对每个结点增加一张热门对象列表和一个数据对象访问计数器;(E)结点负载均衡:(E1)为每个结点设置一个状态表,用于记录从其他结点发来的负载状态,负载状态分为四部分:结点ID、结点IP、当前负载量和时戳,定义结点的当前负载量为最近Δt时间内收到的访问请求数;(E2)当结点n收到访问请求时,将根据自身及其状态表中结点的负载利用率决定如何处理请求,其中负载利用率=当前负载量/结点负载能力:若结点n的负载利用率小于状态表中所有结点的负载利用率时,则结点n响应请求;否则结点n将请求转发给状态表中拥有最小负载利用率的结点。与现有技术相比,本发明的好处是:(1)由于本发明采用了双层的环状网络,低层环上结点的物理地址临近,克服了现有Chord网络中逻辑网络与物理网络失配,查找过程中延迟严重的问题,缩短了结点的平均查询延迟时间,提高了路由查找效率。(2)由于本发明对每个结点都增加了一张热门对象列表和一个数据对象访问计数器,克服了现有Chord网络中查找效率不高的问题,减小了结点的平均查询路径长度,有效地提高了查找效率。(3)由于本发明对每个结点都增加了状态表,通过查询状态表控制结点的响应请求,克服了现有Chord网络中结点负载不平衡的问题,提高了系统稳定性和利用率,使得用户的请求能很快得到响应,结点也能很好的发挥其性能。
附图说明图1为本发明构建路由系统的流程图;图2为本发明构建的双层环状网络的示意图;图3为本发明分配数据对象给结点的示意图;图4为本发明构造结点n1.0路由表的示意图;图5为本发明通过结点n1.0查找数据对象k0.5的路由过程的示意图;图6为本发明加入热门对象策略后之后,通过结点n1.0查找数据对象k0.5的路由过程的示意图。
具体实施方式为了使本发明的技术手段易于明白理解,以下结合具体实例进一步阐述本发明。参照图1,本发明具体实现步骤如下:步骤1:构建双层环状网络。参照图2,本步骤的具体实现如下:1.1)将结点n用标识符G表示,G=nodeID=Hash(node),node通常是结点端口地址、端口号、随机数等或者它们的组合,Hash函数为安全散列函数,G共有m位,前m1位表示为G1,后m2位表示为G2,则结点n表示为n(G1,G2),计算所有结点的G1值与G2值,计算公式为:G1=Hash(GIP)mod2
m1;G2=Hash(IP)mod2
m2;其中GIP为结点n的网关地址,IP为结点n的互联网协议地址,网络中的结点数目没有限制,现以11个结点为例进行说明:假设计算出了11个结点分别为:n0.1,n1.0,n1.3,n1.5,n1.6,n4.0,n4.6,n5.2,n6.0,n6.3,n7.0,则小数点前的数字表示G1的值,分别为0,1,4,5,6,7,小数点后的值为G2值;1.2)对这11个结点的G1值进行比较,并对它们进行分簇,其中n0.1,n5.2,n7.0独立成为三个簇,n1.0,n1.3,n1.5,n1.6这四个结点归为一簇,n4.0,n4.6这两个结点归为一簇,n6.0,n6.3这两个结点归为一簇,共有6簇;1.3)根据每个簇G1值的大小将这6个簇按从小到大顺时针排列成一个环状网络,G1值从小到大顺序为:0,1,4,5,6,7,形成高层环;1.4)结点数大于或等于2的簇是G1值为1,4和6的这三个簇,在这三个簇中可各自根据结点的G2值按从小到大顺时针排列成小的环状网络,形成低层环:1.4.1)在G1值为1的簇中,n1.0,n1.3,n1.5,n1.6这四个结点的G2值按从小到大顺时针排列为:0,3,5,6,则G1值为1的簇形成了一个包含四个结点的低层环;1.4.2)在G1值为4的簇中,n4.0,n4.6这两个结点的G2值按从小到大顺时针排列为:0,6,则G1值为4的簇形成了一个包含两个结点的低层环;1.4.3)在G1值为6的簇中,n6.0,n6.3这两个结点的G2值按从小到大顺时针排列为:0,3,则G1值为6的簇形成了一个包含两个结点的低层环,加上之前的三个独立成环的结点,构成双层环状网络。步骤2:数据对象分配给结点。参照图3,本步骤的具体实现如下:2.1)将数据对象用标识符k表示,k共有m位,前m1位表示为k1,后m2位表示为k2,则数据对象表示为k(k1,k2),计算数据对象k值的公式为:k=objectID=Hash(object);object通常是数据对象的名称、内容、发布者或者它们的组合,数据对象的数量没有限制,现以6个数据对象为例。假设根据上述计算公式计算出6个数据对象分别为:k0.5,k1.6,k3.0,k3.6,k4.6,k6.6;2.2)分配数据对象k0.5:k1的值为0,等于第一簇的G1值,则数据对象k0.5分配在了第一簇中,即第一个低层环中;该低层环只有一个结点n0.1,则数据对象k0.5直接分配给结点n0.1;2.3)分配数据对象k1.6:k1.6的k1值为1,其等于第二簇的G1值1同时大于第一簇的G1值0,则数据对象k1.6被分配在了第二簇中,即第二个低层环中;k1.6的k2值为6,在第二个低层环中,6等于结点n1.6的G2值6同时大于结点n1.6的前一个结点n1.5的G2值5,则数据对象k1.6分配给结点n1.6;2.4)对余下的四个数据对象k3.0,k3.6,k4.6和k6.6也采取相同的操作,使得这四个数据对象按照上述过程分别分配给了结点n4.0,n4.6,n4.6和n6.0。步骤3:构造路由表。路由表包括R指向表和N指向表,R指向表用Rfingerxa0Table表示,N指向表用Nfingerxa0Table表示,本步骤以结点n1.0为例,具体实现如下:3.1)根据结点n(G1,G2)的R指向表中第i项为结点([(G1+2
i-1)mod2
m1],G2),1≤i≤m1,mod表示求余,计算出结点n1.0的R指向表中的三项为n(1+1).0,n(1+2).0和n(1+4).0,同时记录它在高层环上的后继,则这三个结点在高层环上的后继分别为n4.0,n4.0和n5.2,将这三个后继也一同记录于R指向表中;3.2)根据结点n(G1,G2)的N指向表中的第i项为(G1,[(G2+2
i-1)mod2
m2]),1≤i≤m2,计算出结点n1.0的N指向表中的三项为n1.(0+1),n1.(0+2)和n1.(0+4),同时记录它在低层环上的后继,则这三个结点在低层环上的后继分别为n1.3,n1.3和n1.5,将这三个后继也一同记录于N指向表中,则结点n1.0的路由表构造完成,如图4所示;3.3)对网络中的其他结点也采取与结点n1.0相同的操作,即可得到每个结点的路由表,例如图5所示n5.2和n7.0的路由表。步骤4:存储热门对象。将访问次数大于M的数据对象称为热门对象,M的值根据实际需要或反复实验来确定。4.1)将热门对象放置在一个列表中,列表共分三部分:数据对象ID、保存数据对象的结点IP和数据对象访问次数,该列表称为热门对象列表;4.2)将记录数据对象访问次数的计数器称为数据对象访问计数器,当数据对象要访问的结点收到一个数据对象访问请求时,数据对象访问计数器将对相应的访问次数加1;4.3)对每个结点增加一张热门对象列表和一个数据对象访问计数器。步骤5:结点负载均衡。5.1)为每个结点设置一个状态表,用于记录从其他结点发来的负载状态,负载状态分为四部分:结点ID、结点IP、当前负载量和时戳,定义结点的当前负载量为最近Δt时间内收到的访问请求数;5.2)当结点n收到访问请求时,将根据自身及其状态表中结点的负载利用率决定如何处理请求,其中负载利用率=当前负载量/结点负载能力:若结点n的负载利用率小于状态表中所有结点的负载利用率时,则结点n响应请求;否则结点n将请求转发给状态表中拥有最小负载利用率的结点。通过上述5个步骤,完成路由系统的构建,利用该路由系统即可进行对数据对象的路由,查找,连接,数据传输与通信。其中,利用该路由系统进行路由查找具体应用给出两种应用实例:实例1:查找的数据对象不是热门对象,则路由过程为:步骤一:根据路由表的R指向表在高层环上进行路由:1a)根据数据对象k在高层环存在的位置进行定位:若数据对象k保存在当前低层环,则直接查找到数据对象k所在低层环,执行步骤1c);若数据对象k没有保存在当前低层环,则执行步骤1b);1b)通过所在低层环第一个结点的路由表的R指向表查找到高层环上在数据对象k之前且最接近k的低层环,返回步骤1a);1c)确定数据对象k所在低层环,根据路由表的N指向表继续路由。步骤二:根据路由表的N指向表在低层环上通过路由查找数据:2a)根据数据对象k在低层环存在的位置进行查找:若数据对象k保存在所在低层环的当前结点,则直接查找保存数据对象k的结点,查找完成;若没有保存在当前结点,则执行步骤2b);2b)通过当前结点路由表的N指向表查找到低层环上数据对象k之前且最接近k的结点n,返回步骤2a)。现以通过结点n1.0在网络中路由并查找到数据对象k0.5为例,参照图5描述如下:首先,通过结点n1.0的路由表查找到高层环上在k0.5之前且最接近k0.5的结点n5.2;其次,通过结点n5.2的路由表查找到高层环上在k0.5之前且最接近k0.5的结点n7.0;接着,通过结点n7.0的路由表查找到高层环上k0.5之前且最接近k0.5的结点n0.1,n0.1所在低层环只有其一个结点,所以数据对象k0.5查询成功,它保存在结点n0.1处;再次,结点n0.1告诉结点n1.0它保存有数据对象k0.5,结点n1.0去结点n0.1索取对象k0.5;最后,查找到数据对象k0.5,即可进行后续的通信传输。可见,结点n1.0查找到数据对象k0.5共用了3跳。实例2:查找的数据对象是热门对象:步骤a:在环上进行路由,假如没有遇到保存该热门对象信息的结点则执行步骤b与步骤c,假如遇到保存该热门对象信息的结点则执行步骤d;步骤b:根据路由表的R指向表在高层环上进行路由:b1)根据数据对象k在高层环存在的位置进行定位:若数据对象k保存在当前低层环,则直接查找到数据对象k所在低层环,执行步骤b3);若数据对象k没有保存在当前低层环,则执行步骤b2);b2)通过所在低层环第一个结点的路由表的R指向表查找到高层环上在数据对象k之前且最接近k的低层环,返回步骤b1);b3)确定数据对象k所在低层环,根据路由表的N指向表继续路由。步骤c:根据路由表的N指向表在低层环上通过路由查找数据:c1)根据数据对象k在低层环存在的位置进行查找:若数据对象k保存在所在低层环的当前结点,则直接查找保存数据对象k的结点,查找完成;若没有保存在当前结点,则执行步骤c2);c2)通过当前结点路由表的N指向表查找到低层环上数据对象k之前且最接近k的结点n,返回步骤c1)。步骤d:根据该结点保存的热门对象列表直接查找到该热门对象。现以通过结点n1.0在网络中路由并查找到数据对象k0.5为例,参照图6描述如下:首先,通过结点n1.0的路由表查找到高层环上在k0.5之前且最接近k0.5的结点n5.2;其次,通过结点n5.2的热门对象列表,查找到k0.5的信息,并告诉结点n1.0,结点n1.0通过k0.5的信息直接去结点n0.1索取数据对象k0.5;再次,查找到数据对象k0.5,即可进行后续的通信传输。可见,结点n1.0查找到数据对象k0.5只用了1跳,比起实例1结点n1.0查找到数据对象k0.5减少了2跳。